﻿/* Rick van Bodegraven - 0915335
 * 0915335bodegraven@hszuyd.nl
 * 
 * 11-10-2010 - Versie 0.1
 * 14-10-2010 - Versie 0.2
 * 
 * Het object waarin locaties van spelers opgeslagen worden. Wordt door Model gebruikt in een List<ModelSpelerInfo>
 */

using System.Drawing;
using Roborally.CommonData.Enums;
using System;
using System.Collections.Generic;

namespace Roborally.CommonData.GlobaleTypes
{
    /// <summary>
    ///  De SpelerInfo klasse, maar dan voor de MVC namespace. 
    /// </summary>
    public class ModelSpelerInfo
    {
        private Point locatie;
        public Point Locatie
        {
            get { return locatie; }
            set { locatie = value; }
        }


        private Richting richting;
        public Richting Richting
        {
            get { return richting; }
            set { richting = value; }
        }

        private int schade;
        public int Schade
        {
            get { return schade; }
            set { schade = value; }
        }

        private int spelerID;
        public int SpelerID
        {
            get { return spelerID; }
        }

        private string naam;
        public string Naam
        {
            get { return naam; }
        }

        private RobotType robotType;
        public RobotType RobotType
        {
            get { return robotType; }
        }

        private int levens;
        public int Levens
        {
            get { return levens; }
            set { levens = value; }
        }

        private bool powerDown;
        public bool PowerDown
        {
            get { return powerDown; }
            set { powerDown = value; }
        }

        private int checkpoints;
        public int Checkpoints
        {
            get { return checkpoints; }
            set { checkpoints = value; }
        }

        private List<IProgramKaart> programmeerBaai;
        public List<IProgramKaart> ProgrammeerBaai
        {
            get { return programmeerBaai; }
            set { programmeerBaai = value; }
        }

        private int kaartIndex;
        public int KaartIndex
        {
            get { return kaartIndex; }
            set { kaartIndex = value; }
        }

        /// <summary>
        /// Private constructor voor het klonen van het bord
        /// </summary>
        /// <param name="spelerNaam"></param>
        /// <param name="spelerId"></param>
        /// <param name="positie"></param>
        /// <param name="robotType"></param>
        /// <param name="richting"></param>
        /// <param name="schade"></param>
        /// <param name="levens"></param>
        /// <param name="powerDown"></param>
        /// <param name="checkpoints"></param>
        private ModelSpelerInfo(string spelerNaam, int spelerId, Point positie, RobotType robotType,
            Richting richting, int schade, int levens, bool powerDown, int checkpoints, List<IProgramKaart> programmeerBaai,
            int kaartIndex)
        {
            this.robotType = robotType;
            this.naam = spelerNaam;
            this.locatie = new Point(positie.X, positie.Y); //copy
            this.spelerID = spelerId;
            this.richting = richting;
            this.schade = schade;
            this.levens = levens;
            this.powerDown = powerDown;
            this.checkpoints = checkpoints;
            this.programmeerBaai = new List<IProgramKaart>(programmeerBaai); //copy
            this.kaartIndex = kaartIndex;
        }

        public ModelSpelerInfo(int spelerID, string spelerNaam, RobotType robottype)
        {
            this.spelerID = spelerID;
            this.naam = spelerNaam;
            this.robotType = robottype;
        }

        public void VeranderLocatie(Point nieuweLocatie)
        {
            this.locatie = nieuweLocatie;
        }

        /// <summary>
        /// Maakt een kopie van het bord
        /// </summary>
        /// <returns></returns>
        public ModelSpelerInfo Clone()
        {
            return new ModelSpelerInfo(naam, spelerID, locatie, robotType, richting, schade,
                levens, powerDown, checkpoints, programmeerBaai, kaartIndex);
        }


        /// <summary>
        /// Zet de ModelSpelerInfo om naar de string gebruikt in de communicatie
        /// tussen view en gui, volgens het protocol
        /// </summary>
        /// <returns>String met informatie volgens protocol</returns>
        public string ToTransferString()
        {
            string toReturn = "";

            toReturn += spelerID
                + ";" + naam
                + ";" + (int)robotType
                + ";" + schade
                + ";" + locatie.X
                + ";" + locatie.Y
                + ";" + (int)richting
                + ";" + levens
                + ";" + Convert.ToInt32(powerDown)
                + ";" + checkpoints
                + ";";

            //Kaarten toevoegen
            /*for (int j = 0; j <= kaartIndex; j++)
            {
                Console.WriteLine("IS NULL!!");
                toReturn += (int)programmeerBaai[j].GetSoort()
                    + "#" + programmeerBaai[j].AantalStappen
                    + "#" + programmeerBaai[j].Prioriteit
                    + "@";
            }*/
            for (int j = 0; j < programmeerBaai.Count; j++)
            {
                Console.WriteLine("IS NULL!!");
                toReturn += (int)programmeerBaai[j].GetSoort()
                    + "#" + programmeerBaai[j].AantalStappen
                    + "#" + programmeerBaai[j].Prioriteit
                    + "@";
            }

            toReturn += "^";

            return toReturn;
        }
    }
}